import 'package:flutter/material.dart';
import 'package:english_words/english_words.dart';

class RandomWords extends StatefulWidget {

//  @override
//  State<StatefulWidget> createState() {
//    return new RandomWordsState();
//  }

  @override
  createState() => new RandomWordsState();

}

//有状态的组件
class RandomWordsState extends State<RandomWords> {

  // 保存建议保存的单词对
  final _suggestions = <WordPair>[];

  // 增大字体大小
  final _biggerFont = const TextStyle(fontSize: 18.0);

  //
  final _savedList = new Set<WordPair>();

  @override
  Widget build(BuildContext context) {
    // 生成随机的单词
//    final wordPair = new WordPair.random();
//    return new Text(wordPair.asPascalCase);

    return new Scaffold(
      appBar: new AppBar(
        title: new Text('startup Name Generator',textAlign: TextAlign.center,),
        centerTitle: true,
        actions: <Widget>[
          new IconButton(icon: new Icon(Icons.favorite,color: Colors.red,), onPressed: _pushSaved)
        ],
      ),
      body: _buildSuggestions(),
    );
  }

  Widget _buildSuggestions() {
    return new ListView.builder(
      padding: const EdgeInsets.all(16.0),
      // 对于每个建议的单词对都会调用一次itemBuilder，然后将单词对添加到ListTile行中
      // 在偶数行，该函数会为单词对添加一个ListTile row.
      // 在奇数行，该函数会添加一个分割线widget，来分隔相邻的词对。
      // 注意，在小屏幕上，分割线看起来可能比较吃力。
      itemBuilder: (context, i) {
        // 在每一列之前，添加一个1像素高的分隔线widget
        if (i.isOdd) return new Divider();
        // 语法 "i ~/ 2" 表示i除以2，但返回值是整形（向下取整），比如i为：1, 2, 3, 4, 5
        // 时，结果为0, 1, 1, 2, 2， 这可以计算出ListView中减去分隔线后的实际单词对数量
        final index = i ~/ 2;
        if (index >= _suggestions.length) {
          // 接着生成10个单词对，然后添加到建议列表
          _suggestions.addAll(generateWordPairs().take(10));
        }
        return _buildRow(_suggestions[index]);
      },
    );
  }

  // 这个函数在ListTile中显示每个新词对，这使您在下一步中可以生成更漂亮的显示行
  Widget _buildRow(WordPair wordPair) {
    final alreadySaved = _savedList.contains(wordPair);

    return ListTile(
      title: new Text(wordPair.asPascalCase, style: _biggerFont,),
      trailing: new Icon(
        alreadySaved ? Icons.favorite : Icons.favorite_border,
        color: alreadySaved ? Colors.red : null,
      ),
      onTap: () {
        setState(() {
          if (alreadySaved) {
            _savedList.remove(wordPair);
          } else {
            _savedList.add(wordPair);
          }
        });
      },
    );
  }

  void _pushSaved(){
    Navigator.of(context).push(
        new MaterialPageRoute(builder: (context) {
          final tiles = _savedList.map(
              (pair) {
                return new ListTile(
                  title: new Text(
                    pair.asPascalCase,
                    style: _biggerFont,
                  ),);
              }
          );
          final divided = ListTile.divideTiles(tiles: tiles, context: context).toList();
          return new Scaffold(
            appBar: new AppBar(
              title: new Text('saved Suggestions'),
              centerTitle: true,
            ),
            body: new ListView(children: divided,),
          );
        })
    );
  }
}